#include "mainwindow.h"
#include <QApplication>

#include <QSpinBox>
#include <QSlider>
#include <QLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget window;

    window.setWindowTitle("Enter your age");

    QSpinBox *spinBox = new QSpinBox(&window);
    QSlider *slider = new QSlider(Qt::Horizontal, &window);
    spinBox->setRange(0, 130);
    slider->setRange(0, 130);

    //绑定滑块的信号到设置spinbox的设置值的函数
    QObject::connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);

    //绑定spinbox的信号到滑块的设置函数
    //直接使用QObject::connect(slider, &QSlider::valueChanged, spinBox, &QSpinBox::setValue);
    //会发现报错，因为这个信号有两个版本，需要指定，我们查看help可以使用如下方式
    //1.内部转换
    //QObject::connect(spinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), slider, &QSlider::setValue);
    //2.也可以先定义一个函数版本
    //void (QSpinBox:: *spinBoxSignal)(int) = &QSpinBox::valueChanged;
    //QObject::connect(spinBox, spinBoxSignal, slider, &QSlider::setValue);
    //3.Qt4中使用宏直接转换，qt5中也能用
    QObject::connect(spinBox, SIGNAL(valueChanged(int)),slider,  SLOT(setValue(int)));
    spinBox->setValue(35);

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(spinBox);
    layout->addWidget(slider);
    window.setLayout(layout);




    window.show();

    return a.exec();
}
